<!DOCTYPE html>
<html lang=en>
<head>
    <!-- so meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="HandheldFriendly" content="True">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <meta name="description" content="#.&#x2F;configure  提示没有GCC编译器环境） configure: error: no acceptable C compiler found in $PATH 因为是centos linux，默认可以采用yum方式安装，则采用如下命令安装gcc编译器即可： yum -y install gcc1.下载freetds，点此下载 http:&#x2F;&#x2F;www.jb51.net&#x2F;database&#x2F;2">
<meta property="og:type" content="article">
<meta property="og:title" content="linux下freetds的安装(centos连接数据库)">
<meta property="og:url" content="http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/index.html">
<meta property="og:site_name" content="TmoonSite">
<meta property="og:description" content="#.&#x2F;configure  提示没有GCC编译器环境） configure: error: no acceptable C compiler found in $PATH 因为是centos linux，默认可以采用yum方式安装，则采用如下命令安装gcc编译器即可： yum -y install gcc1.下载freetds，点此下载 http:&#x2F;&#x2F;www.jb51.net&#x2F;database&#x2F;2">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2017-01-09T08:36:08.000Z">
<meta property="article:modified_time" content="2020-01-07T10:48:14.865Z">
<meta property="article:author" content="Tmoonlight">
<meta name="twitter:card" content="summary">
    
    
        
          
              <link rel="shortcut icon" href="/images/favicon.ico">
          
        
        
          
            <link rel="icon" type="image/png" href="/images/logo2.gif" sizes="192x192">
          
        
        
          
            <link rel="apple-touch-icon" sizes="180x180" href="/images/logo2.gif">
          
        
    
    <!-- title -->
    <title>linux下freetds的安装(centos连接数据库)</title>
    <!-- styles -->
    
<link rel="stylesheet" href="/css/style.css">

    <!-- persian styles -->
    
      
<link rel="stylesheet" href="/css/rtl.css">

    
    <!-- rss -->
    
    
<meta name="generator" content="Hexo 4.2.0"></head>

<body class="max-width mx-auto px3 ltr">
    
      <div id="header-post">
  <a id="menu-icon" href="#"><i class="fas fa-bars fa-lg"></i></a>
  <a id="menu-icon-tablet" href="#"><i class="fas fa-bars fa-lg"></i></a>
  <a id="top-icon-tablet" href="#" onclick="$('html, body').animate({ scrollTop: 0 }, 'fast');" style="display:none;"><i class="fas fa-chevron-up fa-lg"></i></a>
  <span id="menu">
    <span id="nav">
      <ul>
         
          <li><a href="/">Home</a></li>
         
          <li><a href="/about/">About</a></li>
         
          <li><a href="/archives/">Writing</a></li>
         
          <li><a href="/projects_url">Projects</a></li>
        
      </ul>
    </span>
    <br/>
    <span id="actions">
      <ul>
        
        <li><a class="icon" href="/2017/01/21/Dapper%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86%E6%95%B4%E7%90%86/"><i class="fas fa-chevron-left" aria-hidden="true" onmouseover="$('#i-prev').toggle();" onmouseout="$('#i-prev').toggle();"></i></a></li>
        
        
        <li><a class="icon" href="/2016/12/20/%E5%B0%81%E8%A3%85%E6%80%9D%E8%B7%AF/"><i class="fas fa-chevron-right" aria-hidden="true" onmouseover="$('#i-next').toggle();" onmouseout="$('#i-next').toggle();"></i></a></li>
        
        <li><a class="icon" href="#" onclick="$('html, body').animate({ scrollTop: 0 }, 'fast');"><i class="fas fa-chevron-up" aria-hidden="true" onmouseover="$('#i-top').toggle();" onmouseout="$('#i-top').toggle();"></i></a></li>
        <li><a class="icon" href="#"><i class="fas fa-share-alt" aria-hidden="true" onmouseover="$('#i-share').toggle();" onmouseout="$('#i-share').toggle();" onclick="$('#share').toggle();return false;"></i></a></li>
      </ul>
      <span id="i-prev" class="info" style="display:none;">Previous post</span>
      <span id="i-next" class="info" style="display:none;">Next post</span>
      <span id="i-top" class="info" style="display:none;">Back to top</span>
      <span id="i-share" class="info" style="display:none;">Share post</span>
    </span>
    <br/>
    <div id="share" style="display: none">
      <ul>
  <li><a class="icon" href="http://www.facebook.com/sharer.php?u=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/" target="_blank" rel="noopener"><i class="fab fa-facebook " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://twitter.com/share?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&text=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-twitter " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://www.linkedin.com/shareArticle?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-linkedin " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://pinterest.com/pin/create/bookmarklet/?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&is_video=false&description=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-pinterest " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="mailto:?subject=linux下freetds的安装(centos连接数据库)&body=Check out this article: http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/"><i class="fas fa-envelope " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://getpocket.com/save?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-get-pocket " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://reddit.com/submit?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-reddit " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://www.stumbleupon.com/submit?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-stumbleupon " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://digg.com/submit?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-digg " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://www.tumblr.com/share/link?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&name=linux下freetds的安装(centos连接数据库)&description=" target="_blank" rel="noopener"><i class="fab fa-tumblr " aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://news.ycombinator.com/submitlink?u=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&t=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-hacker-news " aria-hidden="true"></i></a></li>
</ul>

    </div>
    <div id="toc">
      <ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#yum-y-install-gcc"><span class="toc-number">1.</span> <span class="toc-text">yum -y install gcc</span></a></li></ol>
    </div>
  </span>
</div>

    
    <div class="content index py4">
        
        <article class="post" itemscope itemtype="http://schema.org/BlogPosting">
  <header>
    
    <h1 class="posttitle" itemprop="name headline">
        linux下freetds的安装(centos连接数据库)
    </h1>



    <div class="meta">
      <span class="author" itemprop="author" itemscope itemtype="http://schema.org/Person">
        <span itemprop="name">TmoonSite</span>
      </span>
      
    <div class="postdate">
      
        <time datetime="2017-01-09T08:36:08.000Z" itemprop="datePublished">2017-01-09</time>
        
      
    </div>


      

      

    </div>
  </header>
  

  <div class="content" itemprop="articleBody">
    <p>#./configure</p>
<p> 提示没有GCC编译器环境）</p>
<p>configure: error: no acceptable C compiler found in $PATH</p>
<p>因为是centos linux，默认可以采用yum方式安装，则采用如下命令安装gcc编译器即可：</p>
<h1 id="yum-y-install-gcc"><a href="#yum-y-install-gcc" class="headerlink" title="yum -y install gcc"></a>yum -y install gcc</h1><p>1.下载freetds，点此下载 <a href="http://www.jb51.net/database/201983.html" target="_blank" rel="noopener">http://www.jb51.net/database/201983.html</a></p>
<p>2.将其解压到任意目录，进入到解压后的文件夹里。</p>
<p>3.切换到root，配置： ./configure –prefix=/usr/local/freetds –with-tdsver=8.0 –enable-msdblib 解释：–prefix为设置FreeTDS的安装目录，–with-tdsver是设置TDS版本， –enable-msdblib为是否允许Microsoft数据库函数库</p>
<p>4.make &amp; make install</p>
<p>5.配置环境变量：vim ~/.bashrc向此文件中加入： export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds/lib/</p>
<p>FreeTDS测试：</p>
<p>FreeTDS安装好了，接下来就可以查看下FreeTDS状态了；</p>
<p>运行./tsql  -C ，在安装目录的bin目录下可以找到tsql ，查看终端打印出来信息，这个-with-tdsver=7.1：</p>
<p>关于安装参考</p>
<p><a href="http://linux.chinaunix.net/techdoc/database/2008/10/31/1042291.shtml" target="_blank" rel="noopener">http://linux.chinaunix.net/techdoc/database/2008/10/31/1042291.shtml</a> 或者：<a href="http://www.linuxdiyf.com/viewarticle.php?id=109086" target="_blank" rel="noopener">http://www.linuxdiyf.com/viewarticle.php?id=109086</a></p>
<p> FreeTDS的配置</p>
<p>　　freeTDS 的配置文件，FreeTDS也支持一个旧的配置文件interfaces，但请使用freetds.conf 除非你的环境必须使用interfaces。FreeTDS首先找freetds.conf文件如果没有找到才去找 interfaces文件。 freetds.conf文件默认在/usr/local/freetds/etc目录下，但是可以在configure时配置 sysconfdir选项，这个选项就是freetds.conf文件所存在的目录。freetds.conf配置文件分为两部分：一是[global]部分,另外一个是[dataserver]部分，其中 [dataserver]对应一个数据库。在golbal中的设置是对全部数据库起作用的，但在dataserver 部分的设置只对自己的数据库起作用，并且可以覆盖全局的设置。</p>
<p>例如: freetds.conf文件：</p>
<p>[global] </p>
<p>tds version = 4.2 </p>
<p>[myserver] </p>
<p>host = <a href="http://ntbox.mydomain.com/" target="_blank" rel="noopener">ntbox.mydomain.com</a> </p>
<p>port = 1433 </p>
<p>[myserver2] </p>
<p>host = <a href="http://unixbox.mydomain.com/" target="_blank" rel="noopener">unixbox.mydomain.com</a> </p>
<p>port = 4000 </p>
<p>tds version = 5.0</p>
<p>　　这个文件中global设置所有数据库使用tds版本为4.2，但在myserver2中使用的版本却是5.0， 如果myserver2中没有这一项，那就是用4.2版本的如myserver。</p>
<p>其配置项解释如下：</p>
<p>ltds version       : 指明tds协议的版本，连接数据库时使用，如果在环境变量中没有设置 此项,则由此配置决定，协议版本可取4.2,5.0,7.0,8.0。</p>
<p>lhost                 : 数据库服务器的主机名或者ip地址。</p>
<p>lport                 : 数据库服务器的监听端口，可以取任何有效的端口值，一般而言Sybase SQL10以前为 1433，10以上用5000，而Sybase SQLAnywhere 7是2638，Microsoft SQL server则用 1433。此配置可以被环境变量中的TDSPORT改写。</p>
<p>linitial block size : 此值只能取512的倍数，默认为512，指定了协议块的最大值， 一般不要改变此默认 配置。</p>
<p>ldump file          : 任何有效的文件名，指明了转储文件的路径并且会打开日志记录。</p>
<p>ldump file append: yes或者no，决定是否追加保存到dump file文件中。</p>
<p>ltimeout            ：设置处理的最大等待时间。</p>
<p>lconnect timeout： 设置连接的最大等待时间。</p>
<p>lemulate little endian: yes或者no,是否强制大端机使用小端方式与MS Server通信。</p>
<p>lclient charset   : 任何有效的iconv字符集。默认值为ISO-8859-1,使FreeTDS使用 iconv在数据库服务器和用户程序之间转换。</p>
<p>FreeTDS函数 </p>
<p>1． Dbcmd和dbfcmd</p>
<p>函数原形： Dbcmd(DBPROCESS *proc,char * sql);</p>
<p>   　　　　 Dbcmd(DBPROCESS *proc, char * format,char *args);</p>
<p>功      能：该函数主要是构造sql语句，一个是带参数的，一个不带参数。</p>
<p>2． Dbsqlexec</p>
<p>函数原形：Dbsqlexec（DBPROCESS *proc）；</p>
<p>功      能：该函数负责执行你所构造的sql语句。</p>
<p>3． Dbresults</p>
<p>函数原形：Dbrerults（DBPROCESS *proc）；</p>
<p>功      能：得到sql语句的执行结果。返回值如果为NO_MORE_RESULTS=0，表明sql查询为空值（就是没有一条满足条件的结果），如果为（FAIL）=-1，表明查询出错，如果为（SUCCESS）=1，表明有结果且不为空。</p>
<p>4． DBROWS（全大写）</p>
<p>函数原形：DBROWS（DBPROCESS *proc）；</p>
<p>功      能：取出一行记录的信息。</p>
<p>5． Dbbind</p>
<p>函数原形：Dbbind（DBPROCESS *proc，int colmn，</p>
<p>功      能：将sql查询出来的结果绑定到一个变量。第一个参数为从数据库那里拿的句柄，第二个参数是对应你的select语句中查询需要的字段（注：必须是按照select顺序绑定的，例如select user，password from hist1 ，如果值为1，就是绑定的user），第三个参数是绑定字段的类型，最后一个参数是绑定的变量。</p>
<p>6．    Dbnextrow</p>
<p>函数原形：Dbnextrow（DBPROCESS *proc）；</p>
<p>功      能：该函数将取出满足sql语句的每一行，返回值为0，代表处理结束，返回值为-1出错。</p>
<p>7．  Dbcancel</p>
<p>函数原形：Dbcancel（DBPROCESS *proc）；</p>
<p>功      能：清空上次查询得到的数据集，如果是一个句柄的话，每次重新执行select语句之前都要调用它清空结果，不然数据库会报错的。</p>
<p>8． Dbclose</p>
<p>函数原形：Dbclose（DBPROCESS *proc）；</p>
<p>功      能：关闭句柄。当不再使用时必须关闭句柄。</p>
<p>9．  Dbinit</p>
<p>函数原形：Dbinit（）</p>
<p>功      能：初识化数据库连接。返回值为-1出错。</p>
<p>10． Dblogin</p>
<p>函数原形：LOGINREC       *Dblogin（）；</p>
<pre><code>DBSETLUSER(login,SOFT);  //set the database user 

DBSETLPWD(login,SOFTPASS);//set password</code></pre><p>功     能：根据用户名和密码连接数据库。</p>
<p>11．Dbcount</p>
<p>函数原形：Dbcount（DBPROCESS *proc）；</p>
<p>功      能：该函数将得到sql结果集被处理的行数，可以用它来判断你的select语句是否得到正确的处理。</p>
<p>12．Dbopen</p>
<p>函数原形：DBPROCESS * Dbopen（LOGINREC     *login，NULL）；</p>
<p>功      能：返回一个操作数据库的句柄。</p>
<p>另外再介绍两个关于数据库的出错信息的函数：</p>
<p>dberrhandle(int *err);</p>
<p>dbmsghandle(int* err);</p>
<p>实例代码</p>
<p>#include &lt;stdio.h&gt;</p>
<p>#include &lt;stdlib.h&gt;</p>
<p>#include &lt;string.h&gt;</p>
<p>#include &lt;unistd.h&gt;</p>
<p>#include &lt;sqlfront.h&gt; /* sqlfront.h always comes first */</p>
<p>#include &lt;sybdb.h&gt; /* sybdb.h is the only other file you need */</p>
<p>#define SQLDBIP “ “ //SQL数据库服务器IP</p>
<p>#define SQLDBPORT “ “ //SQL数据库服务器端口</p>
<p>#define SQLDBNAME “ “ //SQL数据库服务器数据库名</p>
<p>#define SQLDBUSER “ “ //SQL数据库服务器数据库用户名</p>
<p>#define SQLDBPASSWD “ “ //SQL数据库服务器用户密码</p>
<p>#define SQLDBSERVER SQLDBIP”:”SQLDBPORT</p>
<p>#define DBSQLCMD “select * from yancao”</p>
<p>int main(int argc, char *argv[])</p>
<p>{</p>
<pre><code>int i, ch;

LOGINREC *login; //描述客户端的结构体，在连接时被传递到服务器.

DBPROCESS *dbproc; //描述连接的结构体，被dbopen()函数返回

RETCODE erc; //库函数中最普遍的返回类型.</code></pre><p>/<strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>*****</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>/</p>
<p>//在开始调用本库函数前常常要先调用dbinit()函数</p>
<pre><code>if (dbinit() == FAIL) {

    fprintf(stderr, &quot;%s:%d: dbinit() failed\n&quot;,argv[0], __LINE__);

    exit(1);

 }</code></pre><p>//dblogin()函数申请 LOGINREC 结构体，此结构体被传递给dbopen()函数，用来创建一个连接。</p>
<p>//虽然基本上不会调用失败，但是检查它！.</p>
<pre><code>if ((login = dblogin()) == NULL) {

    fprintf(stderr, &quot;%s:%d: unable to allocate login structure\n&quot;,argv[0],__LINE__);

    exit(1);

}</code></pre><p>//LOGINREC结构体不能被直接访问，要通过以下宏设置，下面设置两个必不可少的域</p>
<pre><code>DBSETLUSER(login, SQLDBUSER);

DBSETLPWD(login, SQLDBPASSWD); </code></pre><p>/<strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>*****</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>/</p>
<p>//dbopen()与服务器建立一个连接. 传递 LOGINREC 指针和服务器名字</p>
<pre><code>if ((dbproc = dbopen(login, SQLDBSERVER)) == NULL) {

   fprintf(stderr, &quot;%s:%d: unable to connect to %s as %s\n&quot;,</code></pre><p> argv[0], <strong>LINE</strong>,</p>
<pre><code>    SQLDBSERVER, SQLDBUSER);

    exit(1);

}</code></pre><p>// 可以调用dbuser()函数选择我们使用的数据库名，可以省略，省略后使用用户默认数据库.</p>
<pre><code>if (SQLDBNAME &amp;&amp; (erc = dbuse(dbproc, SQLDBNAME)) == FAIL) {

   fprintf(stderr, &quot;%s:%d: unable to use to database %s\n&quot;,</code></pre><p>argv[0], <strong>LINE</strong>, SQLDBNAME);</p>
<pre><code>    exit(1);

}</code></pre><p>/<strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>*****</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>/</p>
<pre><code>dbcmd(dbproc, DBSQLCMD);//将SQL语句填充到命令缓冲区

 printf(&quot;\n&quot;);

if ((erc = dbsqlexec(dbproc)) == FAIL) {

    fprintf(stderr, &quot;%s:%d: dbsqlexec() failed\n&quot;, argv[0], __LINE__);

    exit(1); //等待服务器执行SQL语句，等待时间取决于查询的复杂度。

}</code></pre><p>/<strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>*****</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>/</p>
<p>//在调用dbsqlexec()、dbsqlok()、dbrpcsend()返回成功之后调用dbresults()函数</p>
<pre><code>printf(&quot;then fetch results:\n&quot;);

int count = 0;

while ((erc = dbresults(dbproc)) != NO_MORE_RESULTS) {

    struct col { //保存列的所有信息

    char *name; //列名字

    char *buffer; //存放列数据指针

    int type, size, status;

} *columns, *pcol;

int ncols;

int row_code; 

if (erc == FAIL) {

    fprintf(stderr, &quot;%s:%d: dbresults failed\n&quot;,</code></pre><p>argv[0], <strong>LINE</strong>);</p>
<pre><code>    exit(1);

 } 

ncols = dbnumcols(dbproc);//返回执行结果的列数目 

if ((columns = calloc(ncols, sizeof(struct col))) == NULL) {

    perror(NULL);

    exit(1);

 }</code></pre><p> /* read metadata and bind. */</p>
<pre><code>for (pcol = columns; pcol - columns &lt; ncols; pcol++) {

    int c = pcol - columns + 1;

     pcol-&gt;name = dbcolname(dbproc, c); //返回指定列的列名

    pcol-&gt;type = dbcoltype(dbproc, c);

    pcol-&gt;size = dbcollen(dbproc, c); 

     printf(&quot;%*s(%d)&quot;, 20, pcol-&gt;name, pcol-&gt;size);

    if ((pcol-&gt;buffer = calloc(1, 20)) == NULL) {

    perror(NULL);

     exit(1);

}

erc = dbbind(dbproc, c, NTBSTRINGBIND, 20, (BYTE*)pcol-&gt;buffer);

if (erc == FAIL) {

    fprintf(stderr, &quot;%s:%d: dbbind(%d) failed\n&quot;,</code></pre><p>argv[0], <strong>LINE</strong>, c);</p>
<pre><code>    exit(1);

}

erc = dbnullbind(dbproc, c, &amp;pcol-&gt;status); //(5)

 if (erc == FAIL) {

    fprintf(stderr, &quot;%s:%d: dbnullbind(%d) failed\n&quot;,</code></pre><p>argv[0], <strong>LINE</strong>, c);</p>
<pre><code>    exit(1);

}</code></pre><p> }</p>
<pre><code>printf(&quot;\n&quot;);</code></pre><p>/* 打印数据 */</p>
<pre><code>while ((row_code = dbnextrow(dbproc)) != NO_MORE_ROWS) {//读取行数据

switch (row_code) {

case REG_ROW:

 for (pcol=columns; pcol - columns &lt; ncols; pcol++) {

char *buffer = pcol-&gt;status == -1?</code></pre><p>“null” : pcol-&gt;buffer;</p>
<pre><code>printf(&quot;%*s &quot;, 20, buffer);

}

printf(&quot;\n&quot;); break;

case BUF_FULL: break;

case FAIL:

 fprintf(stderr, &quot;%s:%d: dbresults failed\n&quot;,

 argv[0], __LINE__);</code></pre><p>exit(1); break;</p>
<p> default: // (7)</p>
<p> printf(“data for computeid %d ignored\n”, row_code);</p>
<p>}</p>
<p> }</p>
<p> /* free metadata and data buffers */</p>
<p> for (pcol=columns; pcol - columns &lt; ncols; pcol++) {</p>
<p>free(pcol-&gt;buffer);</p>
<p>}</p>
<p> free(columns);</p>
<p>if (DBCOUNT(dbproc) &gt; -1) /* 得到SQL语句影响的行数 */</p>
<p>fprintf(stderr, “%d rows affected\n”, DBCOUNT(dbproc))</p>
<p>}</p>
<p>dbclose(dbproc);</p>
<p>dbexit();</p>
<p>}   </p>

  </div>
</article>



        
          <div id="footer-post-container">
  <div id="footer-post">

    <div id="nav-footer" style="display: none">
      <ul>
         
          <li><a href="/">Home</a></li>
         
          <li><a href="/about/">About</a></li>
         
          <li><a href="/archives/">Writing</a></li>
         
          <li><a href="/projects_url">Projects</a></li>
        
      </ul>
    </div>

    <div id="toc-footer" style="display: none">
      <ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#yum-y-install-gcc"><span class="toc-number">1.</span> <span class="toc-text">yum -y install gcc</span></a></li></ol>
    </div>

    <div id="share-footer" style="display: none">
      <ul>
  <li><a class="icon" href="http://www.facebook.com/sharer.php?u=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/" target="_blank" rel="noopener"><i class="fab fa-facebook fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://twitter.com/share?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&text=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-twitter fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://www.linkedin.com/shareArticle?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-linkedin fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://pinterest.com/pin/create/bookmarklet/?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&is_video=false&description=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-pinterest fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="mailto:?subject=linux下freetds的安装(centos连接数据库)&body=Check out this article: http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/"><i class="fas fa-envelope fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://getpocket.com/save?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-get-pocket fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://reddit.com/submit?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-reddit fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://www.stumbleupon.com/submit?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-stumbleupon fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://digg.com/submit?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&title=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-digg fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="http://www.tumblr.com/share/link?url=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&name=linux下freetds的安装(centos连接数据库)&description=" target="_blank" rel="noopener"><i class="fab fa-tumblr fa-lg" aria-hidden="true"></i></a></li>
  <li><a class="icon" href="https://news.ycombinator.com/submitlink?u=http://yoursite.com/2017/01/09/linux%E4%B8%8Bfreetds%E7%9A%84%E5%AE%89%E8%A3%85(centos%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E5%BA%93)/&t=linux下freetds的安装(centos连接数据库)" target="_blank" rel="noopener"><i class="fab fa-hacker-news fa-lg" aria-hidden="true"></i></a></li>
</ul>

    </div>

    <div id="actions-footer">
        <a id="menu" class="icon" href="#" onclick="$('#nav-footer').toggle();return false;"><i class="fas fa-bars fa-lg" aria-hidden="true"></i> Menu</a>
        <a id="toc" class="icon" href="#" onclick="$('#toc-footer').toggle();return false;"><i class="fas fa-list fa-lg" aria-hidden="true"></i> TOC</a>
        <a id="share" class="icon" href="#" onclick="$('#share-footer').toggle();return false;"><i class="fas fa-share-alt fa-lg" aria-hidden="true"></i> Share</a>
        <a id="top" style="display:none" class="icon" href="#" onclick="$('html, body').animate({ scrollTop: 0 }, 'fast');"><i class="fas fa-chevron-up fa-lg" aria-hidden="true"></i> Top</a>
    </div>

  </div>
</div>

        
        <footer id="footer">
  <div class="footer-left">
    Copyright &copy; 2020 Tmoonlight
  </div>
  <div class="footer-right">
    <nav>
      <ul>
         
          <li><a href="/">Home</a></li>
         
          <li><a href="/about/">About</a></li>
         
          <li><a href="/archives/">Writing</a></li>
         
          <li><a href="/projects_url">Projects</a></li>
        
      </ul>
    </nav>
  </div>
</footer>

    </div>
    <!-- styles -->

<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">


<link rel="stylesheet" href="/lib/justified-gallery/css/justifiedGallery.min.css">


    <!-- jquery -->

<script src="/lib/jquery/jquery.min.js"></script>


<script src="/lib/justified-gallery/js/jquery.justifiedGallery.min.js"></script>

<!-- clipboard -->

  
<script src="/lib/clipboard/clipboard.min.js"></script>

  <script type="text/javascript">
  $(function() {
    // copy-btn HTML
    var btn = "<span class=\"btn-copy tooltipped tooltipped-sw\" aria-label=\"Copy to clipboard!\">";
    btn += '<i class="far fa-clone"></i>';
    btn += '</span>'; 
    // mount it!
    $(".highlight table").before(btn);
    var clip = new ClipboardJS('.btn-copy', {
      text: function(trigger) {
        return Array.from(trigger.nextElementSibling.querySelectorAll('.code')).reduce((str,it)=>str+it.innerText+'\n','')
      }
    });
    clip.on('success', function(e) {
      e.trigger.setAttribute('aria-label', "Copied!");
      e.clearSelection();
    })
  })
  </script>


<script src="/js/main.js"></script>

<!-- search -->

<!-- Google Analytics -->

<!-- Baidu Analytics -->

<!-- Disqus Comments -->


</body>
</html>
